<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <script>
        //【1】1、使用Object.keys()遍历[抓取属性名]
        //返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含Symbol属性).
        var obj = {
            '0': 'a',
            '1': 'b',
            '2': 'c'
        };

        var res = Object.keys(obj);
        console.log(res); //["0", "1", "2"]
        //【2】使用for..in..遍历 【类似数组的for循环】
        // 循环遍历对象自身的和继承的可枚举属性(不含Symbol属性).
        var obj = {
            '0': 'a',
            '1': 'b',
            '3': 'c'
        };

        for (var i in obj) {
            console.log(i, ":", obj[i]); //每一条的属性名：属性值
        }
        //【3】使用Object.getOwnPropertyNames(obj)遍历[抓取属性名]
        // 返回一个数组,包含对象自身的所有属性(不含Symbol属性,但是包括不可枚举属性).
        var obj = {
            '0': 'a',
            '1': 'b',
            '3': 'c'
        };
        var res1 = Object.getOwnPropertyNames(obj);
        console.log(res1); //["0", "1", "3"]
        Object.getOwnPropertyNames(obj).forEach(function(key) {

            console.log(key, obj[key]); //每一条的属性名：属性值

        });
        //【4】使用Reflect.ownKeys(obj)遍历
        //返回一个数组,包含对象自身的所有属性,不管属性名是Symbol或字符串,也不管是否可枚举.  
        var obj = {
            '0': 'a',
            '1': 'b',
            '2': 'c'
        };
        var res2 = Reflect.ownKeys(obj);
        console.log(res2); //["0", "1", "2"]
        Reflect.ownKeys(obj).forEach(function(key) {

            console.log(key, obj[key]);

        });
    </script>
</body>

</html>